package vip.xiaomaoxiaoke.idempotent.support;


import lombok.Setter;
import vip.xiaomaoxiaoke.idempotent.IdempotentExecutor;
import vip.xiaomaoxiaoke.idempotent.IdempotentExecutorFactory;
import vip.xiaomaoxiaoke.idempotent.IdempotentMeta;

/**
 * 简单幂等处理器创建工厂
 */
@Setter
public class SimpleIdempotentExecutorFactory implements IdempotentExecutorFactory {

    /**
     * 幂等唯一表示解析器，底层使用了spel表达式
     * */
    private IdempotentKeyParser idempotentKeyParser;

   /**
    * 结果序列化器
    * */
    private ExecutionResultSerializer serializer;

    /**
     * 持久化技术操作对象
     * */
    private ExecutionRecordRepository executionRecordRepository;

    /**
     * 创建方法
     * */
    @Override
    public IdempotentExecutor create(IdempotentMeta meta) {
        // 创建执行方法
        return new SimpleIdempotentExecutor(meta,
                idempotentKeyParser,
                this.serializer,
                this.executionRecordRepository);
    }
}
